diff options
Diffstat (limited to 'src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx')
| -rw-r--r-- | src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx b/src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx new file mode 100644 index 0000000..4826746 --- /dev/null +++ b/src/app/(main)/teams/[teamId]/TeamMemberEditForm.tsx @@ -0,0 +1,62 @@ +import { + Button, + Form, + FormButtons, + FormField, + FormSubmitButton, + ListItem, + Select, +} from '@umami/react-zen'; +import { useMessages, useUpdateQuery } from '@/components/hooks'; +import { ROLES } from '@/lib/constants'; + +export function TeamMemberEditForm({ + teamId, + userId, + role, + onSave, + onClose, +}: { + teamId: string; + userId: string; + role: string; + onSave?: () => void; + onClose?: () => void; +}) { + const { mutateAsync, error, isPending } = useUpdateQuery(`/teams/${teamId}/users/${userId}`); + const { formatMessage, labels, getErrorMessage } = useMessages(); + + const handleSubmit = async (data: any) => { + await mutateAsync(data, { + onSuccess: async () => { + onSave(); + onClose(); + }, + }); + }; + + return ( + <Form onSubmit={handleSubmit} error={getErrorMessage(error)} defaultValues={{ role }}> + <FormField + name="role" + rules={{ required: formatMessage(labels.required) }} + label={formatMessage(labels.role)} + > + <Select> + <ListItem id={ROLES.teamManager}>{formatMessage(labels.manager)}</ListItem> + <ListItem id={ROLES.teamMember}>{formatMessage(labels.member)}</ListItem> + <ListItem id={ROLES.teamViewOnly}>{formatMessage(labels.viewOnly)}</ListItem> + </Select> + </FormField> + + <FormButtons> + <Button isDisabled={isPending} onPress={onClose}> + {formatMessage(labels.cancel)} + </Button> + <FormSubmitButton variant="primary" isDisabled={false}> + {formatMessage(labels.save)} + </FormSubmitButton> + </FormButtons> + </Form> + ); +} |